﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
//二分查找
//int research(int arr[], int x, int y,int k)
//{
//	while(x <= y)
//	{ 
//		int mid = x + (y - x) / 2;
//		if (arr[mid] > k)
//		{
//			y = mid - 1;
//		}
//		else if (arr[mid] < k)
//		{
//			x = mid + 1;
//		}
//		else
//		{
//			return arr[mid];
//		}
//	}
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
//	int left = 0;
//	int k = 2;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int re= research(arr,left,sz,k);
//	printf("%d", re);
//	return 0;
//}
//
////输入一个乘法口诀表，行数和列数由自己决定
//int main()
//{
//	int i,j;
//	int a = 0;
//	scanf("%d", &a);
//	for (i = 1;i <= a;i++)
//	{
//		for (j = 1;j <= a;j++)
//		{
//			printf("%d*%d=%d ", i, j, i * j);
//
//		}
//	}
//	return 0;
//}
//
//void is_leap_year(int a)
//{
//	if (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0))
//	{
//		printf("是闰年");
//	}
//	else
//	{
//		printf("不是闰年");
//	}
//}
//
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	is_leap_year(year);
//	return 0;
//}
//
////用函数打印素数
//void is_prime(int a)
//{
//	int i = 0;
//	int flag = 1;
//	for (i = 2;i < sqrt(a);i++)
//	{
//		if (a % i == 0)
//		{
//			flag = 0;
//			break;
//		}
//	}
//	if (flag == 1)
//	{
//		printf("%d ", a);
//	}
//}
//
//int main()
//{
//	int a = 0;
//	int i = 0;
//	scanf("%d", &a);
//	is_prime(a);
//	for (i = 100;i <= 200;i++)
//	{
//		is_prime(i);
//	}
//	return 0;
//}
//
//void inti(int arr[],int x)
//{
//	int i = 0;
//	for (i = 0;i < x;i++)
//	{
//		scanf("%d",& arr[i]);
//	}
//}
//void print(int arr[],int x)
//{
//	int i = 0;
//	for (i = 0;i < x;i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//void reserve(int arr[], int sz,int x)
//{
//	int left = 0;
//	int i = 0;
//	int right = sz-1;
//	while (left < right)
//	{
//		int a = arr[left];
//		arr[left] = arr[right];
//		arr[right] = a;
//		left++;
//		right--;
//	}
//	for(i = 0;i < x;i++)
//	printf("%d ", arr[i]);
//}
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	inti(arr,10);
//	print(arr,10);
//	printf("\n");
//	reserve(arr,sz,10);
//	return 0;
//}

//用bool类型来写二分查找
//int main()
//{
//	int my_mom = 7;
//	int left = 0;
//	bool find = false;
//	int birthday[10] = { 1106,529,513,1016,1008,827,818,1109,330,530};
//	int right = sizeof(birthday) / sizeof(birthday[0]) -1;
//
//	while (left <= right)
//	{
//		//需要注意的是mid需要再循环内部不然会导致死循环
//		int mid = left + (right - left) / 2;
//
//		if (mid < my_mom)
//		{
//			left = mid + 1;
//		}
//		else if (mid > my_mom)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			find = true;
//			
//		}
//		//还需要注意的一点是打印（数组名）[mid]时需要放在循环里面
//		//因为循环外没有定义mid
//		if (find == true)
//		{
//			printf("found it. her birthday is %d", birthday[mid]);
//			break;
//		}
//	}
//	
//	return 0;
//}

//用零和非零来实现
//只需要将true改为非零数组false改为0即可
//find的类型改为int
//int main()
//{
//	int my_mom = 7;
//	int left = 0;
//	int find = 0;
//	int birthday[10] = { 1106,529,513,1016,1008,827,818,1109,330,530 };
//	int right = sizeof(birthday) / sizeof(birthday[0]) - 1;
//
//	while (left <= right)
//	{
//		int mid = left + (right - left) / 2;
//
//		if (mid < my_mom)
//		{
//			left = mid + 1;
//		}
//		else if (mid > my_mom)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			find = 1;
//
//		}
//		if (find == 1)
//		{
//			printf("found it. her birthday is %d", birthday[mid]);
//			break;
//		}
//	}
//
//	return 0;
//}

//写一个加法函数
// 函数由函数声明
//函数的定义是一种特殊的函数声明
//int add(int x,int y)
//{
//	int z = x + y;
//	//这里为什么不是return 1或者零呢
//	//因为我们需要返回的值是啊a和b的和
//	//要输的返回值是根据我们的需求来返回的
//	return z;
//}
////当然add函数还可以这样写
//
////int add(int x, int y)
////{
////	return x + y;
////}
//int main()
//{
//	int a, b;
//	//a和b是局部变量是实际参数,简称实参
//	//而x和y是拥有a和b值的临时变量，叫形式参数，简称形参
//	//形参和实参都有独自的空间
//	//形参的修改不会影响实参
//	//形参是实参的一份临时拷贝
//	//形参和实参名字可以相同但是就算啊他们的名字相同但还是在其独立的空间
//
//	scanf("%d %d", &a, &b);
//	int sum = add(a, b);
//	//add（）是对函数进行调用的意思
//	printf("sum = %d", sum);
//	return 0;
//}


//写一个函数判断是奇数还是偶数
//奇数的英语是odd也有奇怪的意思
// 俺的写法
//void Is_odd(int x)
//{
//	if (x % 2 == 1)
//	{
//		printf("%d是奇数\n",x);
//	}
//	else
//	{
//		printf("%d是偶数\n", x);
//	}
//
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	Is_odd(a);
//	return 0;
//}
//鹏哥写法
//bool is_odd(int z)
//{
//	if (z % 2 == 1)
//	{
//		return true;
//	}
//	else
//		return false;
//}
//int main()
//{
//	int z = 0;
//	scanf("%d", &z);
//	printf("%d\n", is_odd(z));
////	if (is_odd(z) == 1)
////	{
////		printf("是奇数\n");
////	}
////	else
////	{
////		printf("是偶数\n");
////	}
// //还有一种写法
//	if (is_odd(z))
//	{
//		printf("是奇数\n");
//	}
//	else
//	{
//		printf("是偶数\n");
//	}
//	return 0;
//}
//return的一些注意事项
//1
//return后边可以是⼀个数值，也可以是⼀个表达式，
// 如果是表达式则先执⾏表达式，再返回表达式的结果
//例
//int add(int a)
//{
//	return a + 1;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int re = add(a);
//	printf("%d", re);
//	return 0;
//}
//2
//return后边也可以什么都没有，直接写
//return;
//这种写法适合函数返回类型是void的情况。
//int add(int a)
//{
//	printf("haha\n");
//	return;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	
//	add(a);
//	return 0;
//}
//3
//return语句执⾏后，函数就彻底返回，后边的代码不再执⾏。
//int add(int a)
//{ 
//	return a+1;
//	printf("haha\n");
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int re = add(a);
//	printf("%d", re);
//	return 0;
//}
//4
//return返回的值和函数返回类型不⼀致，
// 系统会⾃动将返回的值隐式转换为函数的返回类型。
//int test()
//{
//	return 5.29;
//}
//int main()
//{
//	int a = 0;
//	int re = test();
//	printf("%d", re);
//	return 0;
//}
//5
//如果函数中存在if等分⽀的语句，
// 则要保证每种情况下都有return返回，否则会出现编译错误。
//int test(int a)
//{
//	if(a >0)
//	return 1;
//	//因为a的其他范围没有返回值
//	// 所以没有程序不能执行
//	//这就是5的意思
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int re = test(a);
//	printf("%d", re);
//	return 0;
//}

//6
//函数的返回类型如果不写
// ，编译器会默认函数的返回类型是int。
//不写那默认返回值为int
// test(int x)
//{
//
//	 return 11.06+5.29;
//}
//int main()
//{
//	int a = 0;
//	int re = test(a);
//	printf("%d", re);
//	return 0;
//}
//7
//函数写了返回类型，但是函数中没有使⽤return返回值，
// 那么函数的返回值是未知的
//例：
//int test(int x)
//{
//	x = 50;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d",&a);
//	int re = test(a);
//	return 0;
//}